package SparqlClient;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class SparqlClientExample {

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
    	SparqlClientExample sp = new SparqlClientExample();
    	
        //SparqlClient sparqlClient = new SparqlClient("192.168.250.91:8080/sparqluedo");
    	SparqlClient sparqlClient = new SparqlClient("127.0.0.1:3030/space");

        String query = "ASK WHERE { ?s ?p ?o }";
        
        String prefix = "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>" +
    		    "PREFIX owl: <http://www.w3.org/2002/07/owl#>" +
    		    "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>" +
    		    "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>";
        
        boolean serverIsUp = sparqlClient.ask(query);
        if (serverIsUp) {
            System.out.println("server is UP");
            
            
          //Requête 1

          query = prefix + "PREFIX onto: <http://www.irit.fr/recherches/MELODI/ontologies/FilmographieV1.owl#>"+
  			    "SELECT distinct ?p  WHERE{{"
  			    + "?x ?y ?w."
  			    + "?w a ?b."
  			    + "?b rdfs:label ?s."
  			    + "?x rdfs:label ?m."
  			    + "?w rdfs:label ?p."
  			    + "}UNION"
  			    + "{"
  			    + "?w ?y ?x."
  			    + "?w a ?b."
  			    + "?b rdfs:label ?s."
  			    + "?x rdfs:label ?m."
  			    + "?w rdfs:label ?p."
  			    + "}"
  			    + "FILTER regex(?m,'Intouchables','i')."
  			    + "FILTER regex(?s,'personne','i')."
  			    + "}";
          
//          //Requête 2
//            query = prefix +
//          		"PREFIX onto: <http://www.irit.fr/recherches/MELODI/ontologies/FilmographieV1.owl#>" +
//          		"SELECT distinct ?p WHERE{"
//          			+ "?x ?y ?w."
//	    			+ "?x rdfs:label 'Omar Sy'."
//	    			+ "?y rdfs:label ?q."
//		    		+ "?w rdfs:label ?p."
//		    		+ "FILTER regex(?q,'lieu','i')."
//		    		+ "FILTER regex(?q,'naissance','i')."
//		    		+"}";
//            
//		   //Requête 3		
//		    query = prefix + "PREFIX onto: <http://www.irit.fr/recherches/MELODI/ontologies/FilmographieV1.owl#>"+
//			    "SELECT distinct ?p  WHERE{{"
//			    + "?x ?y ?w."
//			    + "?w a ?b."
//			    + "?b rdfs:label ?s."
//			    + "?x rdfs:label ?m."
//			    + "?y rdfs:label ?q."
//			    + "?w rdfs:label ?p."
//			    + "}UNION"
//			    + "{"
//			    + "?w ?y ?x."
//			    + "?w a ?b."
//			    + "?b rdfs:label ?s."
//			    + "?x rdfs:label ?m."
//			    + "?y rdfs:label ?q."
//			    + "?w rdfs:label ?p."
//			    + "}"
//			    + "FILTER regex(?m,'Intouchables','i')."
//			    + "FILTER regex(?q,'récompens','i')."
//			    + "FILTER regex(?s,'personne','i')."
//			    + "}";
//		    
//		    //Requête 4
//		    query = prefix + "PREFIX onto: <http://www.irit.fr/recherches/MELODI/ontologies/FilmographieV1.owl#>" +
//		    	"SELECT distinct ?p WHERE {"
//		    	+ "?x ?y ?w."
//		    	+ "?a ?b ?x."
//		    	+ "?w rdfs:label 'Globes de Cristal 2012'@fr."
//		    	+ "?x rdfs:label ?p."
//		    	+ "?b rdfs:label ?q."
//		    	+ "FILTER regex(?q,'palmarès','i')."
//		    	+ "}";
		    // Compléter les labels des autres acteurs récompensés
		    
		    //Requête 5
//		    query =  prefix + "PREFIX onto: <http://www.irit.fr/recherches/MELODI/ontologies/FilmographieV1.owl#>"
//		    		+ "SELECT distinct ?p WHERE {"
//		    		+ "?x ?y ?w."
//		    		+ "?x rdfs:label 'Globes de Cristal 2012'@fr."
//		    		+ "?y rdfs:label ?z."
//		    		+ "?w ?n ?p."
//		    		+ "FILTER regex(?z, 'membre', 'i')."
//		    		+ "FILTER regex(?z, 'jury', 'i')."
//		    		+ "FILTER isLiteral(?p) } ";
		    
		    // Il faudrait compléter les labels des journalistes
		    
//		    //Requête 6
//		    query = prefix + "PREFIX onto: <http://www.irit.fr/recherches/MELODI/ontologies/FilmographieV1.owl#>"
//					+ "Select distinct ?p where {"
//					+ "?u ?a ?w."
//					+ "?w a ?z."
//					+ "?z rdfs:label 'prix'@fr."
//					+ "?u rdfs:label 'Omar Sy'."
//					+ "?x ?y ?w."
//					+ "?x rdfs:label 'Globes de Cristal 2012'@fr."
//					+ "?w rdfs:label ?p."
//					+ "} ";			
//			
//		   
//		    
//		    //Requête 7
//		    query = prefix + "PREFIX onto: <http://www.irit.fr/recherches/MELODI/ontologies/FilmographieV1.owl#>"+
//		    	"SELECT distinct ?p WHERE {"
//		    	+ "?x ?y ?w."
//		    	+ "?w a ?s."
//		    	+ "?x rdfs:label 'Globes de Cristal 2012'@fr."
//		    	+ "?s rdfs:label 'lieu'@fr."+
//		    	"?lieu rdfs:label ?p."+
//		    	"}";
//		    // Il faudrait compléter les labels des lieux
//		    
//		    //Requête 8
//		    query = prefix + "PREFIX onto: <http://www.irit.fr/recherches/MELODI/ontologies/FilmographieV1.owl#>"+
//		    		"SELECT distinct ?p WHERE {"
//		    		+ "?x ?y ?w."
//		    		+ "?w a ?t."
//		    		+ "?x rdfs:label 'Omar Sy'."
//		    		+ "?t rdfs:label 'prix'@fr."+
//		    		"?w rdfs:label ?p."+
//		    		"}";
//		    
//		    //Requête 9
//		    query = prefix + "PREFIX onto: <http://www.irit.fr/recherches/MELODI/ontologies/FilmographieV1.owl#>"
//		    		+ "SELECT ?p WHERE {"
//		    		+ "?x ?y ?w."
//		    		+ "?x rdfs:label 'Omar Sy'."
//		    		+ "?y rdfs:label 'joué avec'."
//		    		+ "?w rdfs:label ?p."
//		    		+"}";
		    
		 
		    
		    

            		       
            System.out.println(query);
            sp.results(sparqlClient,query);

        } else {
            System.out.println("service is DOWN");
        }
    }
    
	private static String[] MotsCles(String str){
		String sansEspace = str.replaceAll("\\s", "");
    	String[] mot = sansEspace.split(",");
    	for (int i=0; i<mot.length; i++){
    		String rempl = mot[i];
    		System.out.println(rempl);
    	}
		return mot;  	
    }
    
    private  void results(SparqlClient sparqlClient, String query) {
    		//int cpt=0;
    		//List<String> resultList = new ArrayList<String>();
            Iterable<Map<String, String>> results = sparqlClient.select(query);
            //System.out.println(sparqlClient.ask(query));
            System.out.println("Evaluation de la requête");
            for (Map<String, String> result : results) {
            	System.out.println(result);
            	//cpt++;
                //System.out.println(""+cpt+": "+result.get("x")); // Affichage résultat
            	//System.out.println(result.get("p")); // Affichage résultat
               //resultList.add(result.get("p"));
            }
            
            //System.out.println(resultList);
			//return resultList;
    } 
    

}
